class Color {
  /**
   * 将RGB颜色转换为HWB颜色
   * @param {number} r
   * @param {number} g
   * @param {number} b
   * @returns
   */
  static rgb2hwb(r, g, b) {
    // 将RGB颜色值除以255，转换为0-1之间的值
    r /= 255;
    g /= 255;
    b /= 255;
    // 计算最小值和最大值
    let f,
      i,
      w = Math.min(r, g, b),
      v = Math.max(r, g, b),
      black = 1 - v;
    // 如果最小值和最大值相等，则返回HWB颜色
    if (v === w) return { h: 0, w, b: black };
    // 计算f和i的值
    f = r === w ? g - b : g === w ? b - r : r - g;
    i = r === w ? 3 : g === w ? 5 : 1;
    // 返回HWB颜色
    return {
      h: (i - f / (v - w)) / 6,
      w,
      b: black,
    };
  }

  static hwb2rgb(h, w, b) {
    h *= 6;
    let v = 1 - b,
      n,
      f,
      i;
    if (!h) return { r: v, g: v, b: v };
    i = h | 0;
    f = h - i;
    if (i & 1) f = 1 - f;
    n = w + f * (v - w);
    v = (v * 255) | 0;
    n = (n * 255) | 0;
    w = (w * 255) | 0;
    switch (i) {
      case 6:
      case 0:
        return { r: v, g: n, b: w };
      case 1:
        return { r: n, g: v, b: w };
      case 2:
        return { r: w, g: v, b: n };
      case 3:
        return { r: w, g: n, b: v };
      case 4:
        return { r: n, g: w, b: v };
      case 5:
        return { r: v, g: w, b: n };
    }
  }
}
